package modelo.adaptadores;

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;

import modelo.Cliente;
import modelo.Direccion;
import modelo.Empresa;
import modelo.Factura;
import modelo.Persona;
import modelo.enums.Tarifa;

public class ClienteAdapter extends
		XmlAdapter<ClienteAdapter.AdaptedCliente, Cliente> {

	@Override
	public AdaptedCliente marshal(Cliente cliente) throws Exception {
		if (cliente == null)
			return null;
		return cliente.mapea();
	}

	@Override
	public Cliente unmarshal(AdaptedCliente adaptedCliente) throws Exception {
		if (adaptedCliente == null)
			return null;
		if (adaptedCliente.apellidos != null) {
			Persona persona = new Persona();
			persona.setNombre(adaptedCliente.nombre);
			persona.setApellidos(adaptedCliente.apellidos);
			persona.setNif(adaptedCliente.nif);
			persona.setDireccion(adaptedCliente.direccion);
			persona.setTarifa(adaptedCliente.tarifa);
			persona.setFacturas(adaptedCliente.facturas);
			return persona;
		} else {
			Empresa empresa = new Empresa();
			empresa.setNombre(adaptedCliente.nombre);
			empresa.setNif(adaptedCliente.nif);
			empresa.setDireccion(adaptedCliente.direccion);
			empresa.setTarifa(adaptedCliente.tarifa);
			empresa.setFacturas(adaptedCliente.facturas);
			return empresa;
		}
	}

	@XmlRootElement(name = "cliente")
	public static class AdaptedCliente {
		@XmlElement
		public String nombre;
		@XmlElement
		public String apellidos;
		@XmlElement
		public String nif;
		@XmlElement
		public Direccion direccion;
		@XmlElement
		public Tarifa tarifa;
		@XmlElementWrapper(name = "facturas")
		@XmlElement(name = "factura")
		public List<Factura> facturas;
	}
}
